package src.main.java.utils;

import java.util.ArrayList;
import java.util.List;

import src.main.java.entity.ClienteTO;
import src.main.java.entity.EnderecoTO;
import src.main.java.entity.EntregaTO;
import src.main.java.entity.PedidoDB;
import src.main.java.entity.PedidoTO;
import src.main.java.entity.ProdutoTO;
import src.main.java.modules.container.ClientesCaller;
import src.main.java.modules.container.DescricaoDeProdutosCaller;
import src.main.java.modules.container.EnderecoCaller;

public class ConvertPedidoTO {
	
	public static PedidoDB toPedidoDB(PedidoTO pedidoTO){
		PedidoDB p = new PedidoDB();
		
		ClienteTO c = pedidoTO.getCliente();
		if (c != null){
			p.setCpf(c.getCpf());
		}
		
		EnderecoTO e = pedidoTO.getEndereco();
		if (e != null){
			p.setEndereco_cep(e.getCep());
		}
		
		EntregaTO ent = pedidoTO.getEntrega();
		if (ent != null){
			p.setEntrega_codigo(ent.getNumeroEntrega());
			p.setEntrega_frete(ent.getFrete());
			p.setEntrega_prazo(ent.getPrazo());
			p.setEntrega_transportadora(ent.getTransportadora());
		}
		
		p.setPagamento_tipo(pedidoTO.getTipoPagamento());
		if("boleto".equals(pedidoTO.getTipoPagamento())){
			p.setPagamento_identificador(pedidoTO.getNumeroBoleto());
		}else{
			p.setPagamento_identificador(pedidoTO.getIdTransacao());
		}
		p.setTotal(pedidoTO.getTotal());
		
		List<ProdutoTO> produtos = pedidoTO.getProdutos();
		
		String prods_cod = "";
		String prods_qtd = "";
		for (ProdutoTO prod : produtos){
			prods_cod += prod.getCodigo() + "|";
			prods_qtd += prod.getQuantidade() + "|";
		}
		prods_cod = prods_cod.substring(0, prods_cod.lastIndexOf("|"));
		prods_qtd = prods_qtd.substring(0, prods_qtd.lastIndexOf("|"));
		
		p.setProdutos_codigos(prods_cod);
		p.setProdutos_qtds(prods_qtd);
		
		
		return p;
		
	}
	
	public static PedidoTO fromPedidoDB(PedidoDB pedidoDB){
		PedidoTO p = new PedidoTO();
		p.setId(pedidoDB.getId());
		
		ClienteTO cliente = ClientesCaller.getCliente(pedidoDB.getCpf());
		p.setCliente(cliente);
		
		EnderecoTO endereco = EnderecoCaller.buscaPorCep(pedidoDB.getEndereco_cep());
		p.setEndereco(endereco);
		
		EntregaTO entrega = new EntregaTO();
		entrega.setCep(pedidoDB.getEndereco_cep());
		entrega.setNumeroEntrega(pedidoDB.getEntrega_codigo());
		entrega.setTransportadora(pedidoDB.getEntrega_transportadora());
		entrega.setPrazo(pedidoDB.getEntrega_prazo());
		entrega.setFrete(pedidoDB.getEntrega_frete());
		p.setEntrega(entrega);
		
		p.setTipoPagamento(pedidoDB.getPagamento_tipo());
		if("boleto".equals(p.getTipoPagamento())){
			p.setNumeroBoleto(pedidoDB.getPagamento_identificador());
		}else{
			p.setIdTransacao(pedidoDB.getPagamento_identificador());
		}
		p.setTotal(pedidoDB.getTotal());
		
		List<ProdutoTO> produtos = new ArrayList();
		
		String prods_cod = pedidoDB.getProdutos_codigos();
		String prods_qtd = pedidoDB.getProdutos_qtds();
		
		int i=0;
		String[] codigos = prods_cod.split("\\|");
		String[] qtds = prods_qtd.split("\\|");
		for (String c : codigos){
			ProdutoTO produto = new ProdutoTO();
			produto = DescricaoDeProdutosCaller.getProdutoByCodigo(Long.parseLong(c));
			produto.setQuantidade(Integer.parseInt(qtds[i]));
			produtos.add(produto);
			i++;
		}
		p.setProdutos(produtos);
		
		return p;
		
	}

}
